package cn.demomaster.quickpermission.listener;

import android.content.Context;

import cn.demomaster.quickpermission.PermissionRequest;

/**
 * 监听器接口，用于监听与处理权限请求的各个阶段。
 */
public interface IPermissionHandler {

    /**
     * 处理请求应用所需的权限。
     *
     * @param context     上下文环境
     * @param permissions 需要申请的权限数组
     * @param listener    权限请求结果的监听器
     */
    boolean handleRequestPermission(Context context, PermissionRequest request);

    /**
     * 处理权限被拒绝的逻辑。
     *
     * @param context       上下文环境
     * @param deniedPermissions 被拒绝的权限列表
     * @param listener       权限请求结果的监听器，可用于进一步的操作反馈
     */
    boolean handlePermissionDenial(Context context, PermissionRequest request);

    /**
     * 处理特殊权限
     * @param context
     * @param request
     */
    void onStartPermissionActivity(Context context, PermissionRequest request);//页面跳转申请权限

}


//
//    public static abstract class PermissionListener implements PermissionHandler {
//        @Override
//        public void onRefused() {
//            System.out.println("权限被拒绝");
//        }
//
//        /**
//         * 可以重写，权限申请流程
//         *
//         * @param context
//         * @param request
//         * @return
//         */
//        @Override
//        public boolean handRequest(Context context, PermissionRequest request) {
//            PermissionModel permissionModel = request.getPermissionModelList().get(request.getIndex());
//            System.out.println("权限被拒绝：" + permissionModel.getName());
//            //弹框提示用户手动打开 处理特殊权限
//            switch (permissionModel.getName()) {
//                case Manifest.permission.INSTALL_PACKAGES:
//                case Manifest.permission.REQUEST_INSTALL_PACKAGES:
//                case Manifest.permission.SYSTEM_ALERT_WINDOW:
//                case Manifest.permission.PACKAGE_USAGE_STATS:
//                case Manifest.permission.WRITE_SETTINGS:
//                case Manifest.permission.BIND_ACCESSIBILITY_SERVICE:
//                    showPermissionDialog(context, request);
//                    return true;
//                case Manifest.permission.MANAGE_EXTERNAL_STORAGE:
//                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
//                        showPermissionDialog(context, request);
//                        return true;
//                    }
//                    return false;
//            }
//            return false;
//        }
//
//        public void showPermissionDialog(Context context, PermissionRequest request) {
//            PermissionModel permissionModel = request.getPermissionModelList().get(request.getIndex());
//            String title = context.getString(R.string.permission_application);
//            String tip = "";
//            switch (permissionModel.getName()) {
//                case Manifest.permission.INSTALL_PACKAGES:
//                case Manifest.permission.REQUEST_INSTALL_PACKAGES:
//                    tip = "安装应用权限";
//                    break;
//                case Manifest.permission.SYSTEM_ALERT_WINDOW:
//                    tip = "悬浮窗权限";
//                    break;
//                case Manifest.permission.PACKAGE_USAGE_STATS:
//                    tip = "查看网络访问状态";
//                    break;
//                case Manifest.permission.WRITE_SETTINGS:
//                    tip = "需改系统设置";
//                    break;
//                case Manifest.permission.BIND_ACCESSIBILITY_SERVICE:
//                    tip = "无障碍服务";
//                    break;
//                case Manifest.permission.MANAGE_EXTERNAL_STORAGE:
//                    tip = "文件管理权限";
//                    break;
//            }
//            showAlert(context, title, tip, !handRefused(context, request), (dialog, which) -> requestPermissionImpl2(context, request), (dialog, which) -> {
//                dialog.dismiss();
//                dealPermissionResult(context, request);
//            });
//        }
//
//        /**
//         * 权限被拒绝，
//         *
//         * @param context
//         * @param request
//         * @return true 重新申请 false 忽略继续申请下一个
//         */
//        @Override
//        public boolean handRefused(Context context, PermissionRequest request) {
//            PermissionModel permissionModel = request.getPermissionModelList().get(request.getIndex());
//            switch (permissionModel.getName()) {
//                case Manifest.permission.SYSTEM_ALERT_WINDOW:
//                    return false;
//                case Manifest.permission.INSTALL_PACKAGES:
//                    return false;
//            }
//            return false;//返回此权限是否必须，若是必要权限可以返回true，重复请求
//        }
//
//        @Override
//        public void onStartPermissionActivity(Context context, PermissionRequest request) {
//            String permissionName = request.getPermissionModelList().get(request.getIndex()).getName();
//            if (permissionName.equals(Manifest.permission.SYSTEM_ALERT_WINDOW)
//            ||permissionName.equals(Manifest.permission.BIND_ACCESSIBILITY_SERVICE)) {
//                Handler handler = new Handler(Looper.getMainLooper());
//                handler.post(() -> {
//                    Intent intent = new Intent(context, DialogWindowActivity.class);
//                    Bundle bundle = new Bundle();
//                    bundle.putString("permission", permissionName);
//                    intent.putExtras(bundle);
//                    if(!(context instanceof Activity)){
//                        intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
//                    }
//                    (context).startActivity(intent);
//                    // 参数1：SecondActivity进场动画，参数2：MainActivity出场动画
//                    if(context instanceof Activity) {
//                        ((Activity)context).overridePendingTransition(0, 0);
//                    }
//                });
//            }
//        }
//    }
